package main

import "fmt"

// 斐波那契计算 需要使用到无缓冲channel

func fibonacc(c, quit chan int) int {
	x, y := 1, 1
	// 注意这里的for select case 结构 用来做多路判断 类似于 I/O的select模式
	// 一般主线程中不可能只循环读写单个channel
	for {
		select {
		case c <- x:
			// 如果c可写
			x, y = y, x+y
		case <-quit:
			// 如果quit可读 此时<-quit等于 发送的0
			return x
		}
	}
}

func main() {
	c := make(chan int)
	quit := make(chan int)
	go func() {
		for i := 0; i < 10; i++ {
			fmt.Println("cur is ", <-c)
		}
		quit <- 0
	}()

	fibonacc(c, quit)

}
